/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年01月31日
 * 项目： rainhy-project-hoe
 */
package com.rainhy.core.lang;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;

/**
 * 页码
 * 
 * @author rain
 * @version [版本号, 2016年01月31日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class Pagination {
    
    /** 页码 */
    private List<Integer> pages = new ArrayList<Integer>();
    
    /** 当前页码 */
    private int currentPage;
    
    /** 第一页页码 */
    private int firstPage;
    
    /** 最后一页页码 */
    private int lastPage;
    
    /** 下一页 */
    private int nextPage;
    
    /** 上一页 */
    private int previousPage;
    
    /**
     * 构建页码
     * 
     * @param scale 页码标度(以当前页为界左右分割的长度)
     * @param curPage 当前页码
     * @param totalPages 总页码
     * 
     * @version [版本号, 2016年01月31日]
     * @see [相关类/方法]
     * @since [产品/模块版本]
     * @author rain
     */
    public Pagination(int scale, int curPage, int totalPages) {
        this.currentPage = curPage;
        this.firstPage = 1;
        this.lastPage = totalPages;
        this.previousPage = (firstPage <= currentPage - 1) ? (currentPage - 1) : firstPage;
        this.nextPage = (currentPage + 1 <= lastPage) ? (currentPage + 1) : lastPage;
        
        int scaleStart = currentPage - scale;
        int scaleSize = scale * 2 + 1;
        for (int index = scaleStart; index < scaleSize; index++) {
            if (index < firstPage || lastPage < index) {
                continue;
            }
            pages.add(Integer.valueOf(index));
        }
    }
    
    /** 当前页码 */
    public int getCurrentPage() {
        return currentPage;
    }
    
    /** 第一页页码 */
    public int getFirstPage() {
        return firstPage;
    }
    
    /** 最后一页页码 */
    public int getLastPage() {
        return lastPage;
    }
    
    /** 下一页页码 */
    public int getNextPage() {
        return nextPage;
    }
    
    /** 页码 */
    public List<Integer> getPages() {
        return this.pages;
    }
    
    /** 上一页页码 */
    public int getPreviousPage() {
        return previousPage;
    }
    
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("<<[").append(previousPage).append("] 首页[1]");
        if (CollectionUtils.isEmpty(this.pages)) {
            sb.append(" []");
        } else {
            for (Integer integer : pages) {
                sb.append(' ').append(integer.intValue());
            }
        }
        sb.append(" 尾页[").append(lastPage).append("] >>[").append(nextPage).append(']');
        return sb.toString();
    }
}
